#include <stdio.h>

int main(void) {
    // 定义变量
    // 数据类型的目的是为了告诉编译器，变量在内存中占用多少空间
    // 基础数据类型的地址的存放，系统会自动分配，一般是放在栈区
//    int var = 10;
    // 指针也是个类型，指针类型是指向某个数据类型的指针 （指针变量的目的是为了去装地址）
//    int *p;
//    p = &var;
//    printf("var value = %d, var address = %d\n", var, p);
//
//    *p = 250;
//    printf("var value = %d, var address = %d\n", var, p);


    int a = 15;
    int b = 255;
    int c = 355;
    printf("a address = %x, b address = %x, c address = %x\n", &a, &b, &c);

    int *p = &b;
    // 这里的-1, 是指的是地址的偏移量，偏移量是根据数据类型的大小来计算的，p的类型是int 4个字节，所以偏移量是4，所以p-1的地址是a的地址-4，也就是b的地址
//    p = p - 1;
//    ++p;
    printf("p value = %d, p address = %x\n", *p, p);

    p++;
    // *取值运算符 &取地址运算符
    printf("p value = %d, p address = %x\n", *p, p);

    long *p1 = &a;
    long *p2 = &c;

    int p3 = p1 - p2;
    printf("p3 = %d\n", p3);
//    *++p;
//    printf("p value = %d, p address = %d\n", *p, p);

    return 0;
}
